package com.slt.concurrency.mashibing2019.juc.c_004_Volatile.my;

import java.util.concurrent.TimeUnit;

/**
 * 证明 volatile 的线程可见性
 *
 * 启动两个线程，共同读取一个共享变量，其中一个线程修改，查看另一个线程是否能够及时读取到最新的值。
 */
public class Volatile_visibility02 {
    private boolean running = true;

    private void m(){
        System.out.println("m start");
        while (running){

        }
        System.out.println("m finished");
    }
    public static void main(String[] args) {
        Volatile_visibility02 v = new Volatile_visibility02();
        //启动线程
        new Thread(v::m).start();

        //这里必须 sleep 一下，否则修改会被察觉到 不知道为啥
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(()->{
            v.running = false;
            System.out.println("把 running 设置为false");
        }).start();
    }

}
